package com.itzz.spring_zhoneHeng.service.Impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.itzz.spring_zhoneHeng.base.RestResponse;
import com.itzz.spring_zhoneHeng.base.SystemCode;
import com.itzz.spring_zhoneHeng.dao.MemberDao;
import com.itzz.spring_zhoneHeng.dao.MessagesDao;
import com.itzz.spring_zhoneHeng.dao.UserDao;
import com.itzz.spring_zhoneHeng.pojo.Messages;
import com.itzz.spring_zhoneHeng.pojo.Module;
import com.itzz.spring_zhoneHeng.pojo.Role;
import com.itzz.spring_zhoneHeng.pojo.User;
import com.itzz.spring_zhoneHeng.service.UserService;
import com.itzz.spring_zhoneHeng.util.Upload;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    UserDao userDao;

    @Autowired
    MemberDao memberDao;

    @Autowired
    PasswordEncoder pw;

    @Autowired
    Upload uploadImg;

    @Autowired
    MessagesDao messagesDao;


    //使用apifoxs查询所有的角色
    @Override
    public RestResponse apifoxsAll(User user){
        //查询所有
        List<User> users = userDao.queryAll(user);
        return RestResponse.ok(users);
    }

    //查询所有的用户和它的角色
    @Override
    public RestResponse queryAll(User user, Integer pageNum, Integer pageSize){
        //开启分页
        PageHelper.startPage(pageNum,pageSize);
        //查询所有
        List<User> users = userDao.queryAll(user);
        //添加到分页插件中
        PageInfo<User> userPageInfo = new PageInfo<>(users);
        return RestResponse.ok(userPageInfo);
    }

    //根据用户id回显用户信息和角色信息
    @Override
    public RestResponse queryById(Integer id){
        User user = new User();
        //根据传输过来的id查询用户信息
        user.setId(id);
        List<User> users = userDao.queryAll(user);

        return RestResponse.ok(users);
    }


    //修改用户信息和角色信息
    @Override
    @Transactional
    public RestResponse edit(User user, Integer[] rids,MultipartFile files){
        String path = uploadImg.upLoad(files);
        if(path!=null){
            user.setPath(path);
        }
        //修改角色
        int i = userDao.updateById(user);
        //删除对应的用户和角色表 u_r  根据uid删除u_r表
        userDao.delU_R(user.getId());
        //添加对应的用户和角色表 u_r  根据uid和rids  添加u_r表
        userDao.addU_R(user.getId(),rids);

        if(i>0){
            return RestResponse.ok();
        }
        return RestResponse.fail(SystemCode.UpdateError.getCode(),
                SystemCode.UpdateError.getMessage());
    }

    //添加用户
    @Override
    @Transactional
    public RestResponse addUser(User user,Integer[] rids,Integer mbid,MultipartFile files){
        user.setId(0);
        //判断密码是否为null是否不等于空字符
        if(user.getPassword()!=null&&user.getUsername()!=""){
            String encode = pw.encode(user.getPassword());
            user.setPassword(encode);
        }
        //判断上传的图片路径是否为空
        String path = uploadImg.upLoad(files);
        if(path!=null){
            user.setPath(path);
        }
        //添加用户
        int insert = userDao.insert(user);
//        //添加对应的用户和角色表
        userDao.addU_R(user.getId(),rids);
        //添加u_mb表数据  根据uid添加u_mb表数据   (2)绑定用户和会员表
//        memberDao.addU_MB(mbid,user.getId());

        return RestResponse.ok(insert);
    }


    //根据id删除用户的所有信息
    @Override
    @Transactional
    public RestResponse del(Integer id){

        //(1)删除用户
        int i = userDao.deleteById(id);
        //(2)删除对应的用户和角色表 u_r  根据uid删除u_r表
        userDao.delU_R(id);
        //(3)删除u_mb表数据  根据uid删除u_mb表数据
//        userDao.delU_MB(id);
        if(i>0){
            return RestResponse.ok(i);
        }
        return RestResponse.fail(SystemCode.UpdateError.getCode(),
                SystemCode.UpdateError.getMessage());
    }


    //根据userid查询u_ms表  中的messid
    //根据messid 查询所有的消息记录
    @Override
    @Transactional
    public RestResponse queryMessId(Integer userid){
        //根据userid查询u_ms表  中的messid
        List<Integer> integer = userDao.queryMessId(userid);
        Integer[] messids = integer.toArray(new Integer[integer.size()]);
        List<Messages> messages = messagesDao.queryMessagesById(messids);

        return RestResponse.ok(messages);
    }





}
